// pages/publish/publish.ts

// 定义位置信息接口
interface LocationInfo {
  latitude: number;
  longitude: number;
  address: string;
}

Page({
  /**
   * 页面的初始数据
   */
  data: {
    title: '', // 需求标题
    selectedServiceType: '', // 选中的服务类型
    demandDescription: '', // 需求描述
    descriptionLength: 0, // 描述长度
    photos: [] as string[], // 照片列表
    expectedTime: '', // 期望维修时间
    location: {} as LocationInfo, // 位置信息
    agreed: false, // 是否同意协议
    canSubmit: false, // 是否可以提交
    // 日期选择器相关数据
    datePickerValue: '',
    datePickerStart: '',
    datePickerEnd: ''
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad() {
    // 初始化日期选择器
    const now = new Date();
    const year = now.getFullYear();
    const month = now.getMonth() + 1;
    const day = now.getDate();
    
    // 格式化日期为YYYY-MM-DD格式
    const formattedDate = `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`;
    
    // 设置日期选择器的默认值、起始日期和结束日期
    this.setData({
      datePickerValue: formattedDate,
      datePickerStart: formattedDate,
      datePickerEnd: `${year + 5}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}` // 5年后
    });
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 设置导航栏标题
    wx.setNavigationBarTitle({
      title: '发布需求'
    });
  },

  /**
   * 返回上一页
   */
  goBack() {
    wx.navigateBack();
  },

  /**
   * 选择服务类型
   */
  selectServiceType(e: WechatMiniprogram.TouchEvent) {
    const type = e.currentTarget.dataset.type;
    this.setData({
      selectedServiceType: type
    });
    this.checkCanSubmit();
  },

  /**
   * 处理标题输入
   */
  onTitleInput(e: WechatMiniprogram.Input) {
    const value = e.detail.value;
    this.setData({
      title: value
    });
    this.checkCanSubmit();
  },

  /**
   * 处理需求描述输入
   */
  onDescriptionInput(e: WechatMiniprogram.Input) {
    const value = e.detail.value;
    this.setData({
      demandDescription: value,
      descriptionLength: value.length
    });
    this.checkCanSubmit();
  },

  /**
   * 选择照片
   */
  choosePhoto() {
    const that = this;
    wx.showActionSheet({
      itemList: ['拍照', '从相册选择'],
      success(res) {
        if (res.tapIndex === 0) {
          // 拍照
          that.takePhoto();
        } else if (res.tapIndex === 1) {
          // 从相册选择
          that.chooseFromAlbum();
        }
      }
    });
  },

  /**
   * 拍照
   */
  takePhoto() {
    const that = this;
    wx.chooseMedia({
      count: 1,
      mediaType: ['image'],
      sourceType: ['camera'],
      camera: 'back',
      success(res) {
        const tempFiles = res.tempFiles;
        const photos = that.data.photos;
        if (photos.length < 5) {
          photos.push(tempFiles[0].tempFilePath);
          that.setData({
            photos
          });
          that.checkCanSubmit();
        }
      }
    });
  },

  /**
   * 从相册选择
   */
  chooseFromAlbum() {
    const that = this;
    wx.chooseMedia({
      count: 5 - that.data.photos.length,
      mediaType: ['image'],
      sourceType: ['album'],
      success(res) {
        const tempFiles = res.tempFiles;
        const photos = that.data.photos;
        tempFiles.forEach(file => {
          if (photos.length < 5) {
            photos.push(file.tempFilePath);
          }
        });
        that.setData({
          photos
        });
        that.checkCanSubmit();
      }
    });
  },

  /**
   * 删除照片
   */
  deletePhoto(e: WechatMiniprogram.TouchEvent) {
    const index = e.currentTarget.dataset.index;
    const photos = this.data.photos;
    photos.splice(index, 1);
    this.setData({
      photos
    });
  },


  
  /**
   * 处理日期选择变化
   */
  onDatePickerChange(e: WechatMiniprogram.PickerChange) {
    const dateValue = e.detail.value; // 格式为 YYYY-MM-DD
    
    // 将日期格式化为显示格式
    const dateParts = dateValue.split('-');
    const year = parseInt(dateParts[0]);
    const month = parseInt(dateParts[1]);
    const day = parseInt(dateParts[2]);
    
    const formattedDate = `${year}年${month}月${day}日`;
    
    this.setData({
      expectedTime: formattedDate,
      datePickerValue: dateValue
    });
    
    this.checkCanSubmit();
  },

  /**
   * 获取当前位置
   */
  getCurrentLocation() {
    const that = this;
    wx.getLocation({
      type: 'gcj02',
      success(res) {
        const latitude = res.latitude;
        const longitude = res.longitude;
        
        // 直接使用经纬度，不进行逆地址解析
        // 在实际项目中，可以引入腾讯地图SDK进行逆地址解析
        // 或者使用微信小程序的chooseLocation API获取位置信息
        that.setData({
          location: {
            latitude,
            longitude,
            address: `位置坐标: (${latitude.toFixed(6)}, ${longitude.toFixed(6)})`
          }
        });
        
        // 尝试使用chooseLocation获取更详细的位置信息
        wx.chooseLocation({
          latitude,
          longitude,
          success(result) {
            if (result.address && result.name) {
              that.setData({
                location: {
                  latitude: result.latitude,
                  longitude: result.longitude,
                  address: result.name + ', ' + result.address
                }
              });
            }
            that.checkCanSubmit();
          },
          fail() {
            // 如果chooseLocation失败，使用之前的坐标信息
            that.checkCanSubmit();
          },
          complete() {
            // 无论成功失败，都关闭位置选择器
            wx.hideLoading();
          }
        });
      },
      fail() {
        wx.showToast({
          title: '获取位置失败，请手动选择',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 选择位置
   */
  chooseLocation() {
    const that = this;
    wx.chooseLocation({
      success(res) {
        that.setData({
          location: {
            latitude: res.latitude,
            longitude: res.longitude,
            address: res.address
          }
        });
        that.checkCanSubmit();
      }
    });
  },

  /**
   * 处理协议勾选变更
   */
  onAgreementChange(e: WechatMiniprogram.CheckboxGroupChange) {
    const agreed = e.detail.value.length > 0;
    this.setData({
      agreed
    });
    this.checkCanSubmit();
  },

  /**
   * 显示协议内容
   */
  showAgreement() {
    wx.showModal({
      title: '用户服务协议及风险责任书',
      content: '本协议是您与我们之间关于使用本服务所订立的协议。使用本服务前，请您仔细阅读本协议的全部内容。您理解并同意，您一旦使用本服务，即表示您已同意接受本协议的全部内容。\n\n1. 您需对使用本服务的一切行为负责\n2. 您需遵守当地法律法规\n3. 您需承担使用本服务的风险\n4. 平台不对服务质量做担保',
      confirmText: '我已阅读',
      showCancel: false
    });
  },

  /**
   * 检查是否可以提交
   */
  checkCanSubmit() {
    const { title, selectedServiceType, demandDescription, expectedTime, location, agreed } = this.data;
    const canSubmit = !!title &&
                      !!selectedServiceType && 
                      !!demandDescription && 
                      !!expectedTime && 
                      !!location.address && 
                      agreed;
    
    this.setData({
      canSubmit
    });
  },

  /**
   * 提交需求
   */
  submitDemand() {
    const { title, selectedServiceType, demandDescription, expectedTime, location, agreed } = this.data;
    
    // 检查表单是否完整，并提示用户
    if (!title) {
      wx.showToast({
        title: '请输入需求标题',
        icon: 'none'
      });
      return;
    }
    
    if (!selectedServiceType) {
      wx.showToast({
        title: '请选择服务类型',
        icon: 'none'
      });
      return;
    }
    
    if (!demandDescription) {
      wx.showToast({
        title: '请填写需求描述',
        icon: 'none'
      });
      return;
    }
    
    if (!expectedTime) {
      wx.showToast({
        title: '请选择期望维修时间',
        icon: 'none'
      });
      return;
    }
    
    if (!location.address) {
      wx.showToast({
        title: '请选择维修地点',
        icon: 'none'
      });
      return;
    }
    
    if (!agreed) {
      wx.showToast({
        title: '请阅读并同意用户协议',
        icon: 'none'
      });
      return;
    }
    
    const { photos } = this.data;
    
    // 构建提交的数据
    const demandData = {
      title,
      serviceType: selectedServiceType,
      description: demandDescription,
      photos,
      expectedTime,
      location
    };
    
    console.log('提交的需求数据:', demandData);
    
    // 这里可以添加上传照片和提交需求的逻辑
    wx.showLoading({
      title: '正在提交...',
    });
    
    // 模拟提交过程
    setTimeout(() => {
      wx.hideLoading();
      wx.showToast({
        title: '发布成功',
        icon: 'success',
        duration: 2000,
        success: () => {
          // 延迟返回首页
          setTimeout(() => {
            wx.navigateBack();
          }, 2000);
        }
      });
    }, 1500);
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: '发布维修需求',
      path: '/pages/publish/publish'
    };
  }
})